package pe.mutacion;


import pe.algenetico.MiRandom;
import pe.cromosoma.Cromosoma;

public abstract class MutacionPadre implements Mutacion{
	public Cromosoma[] mutacion(int tam_pob, int tam_elite, Cromosoma[] pob, MiRandom ran, double prob_mut,  int param){
		boolean mutado;
		double prob;
		for (int i=0;i<tam_pob-tam_elite;i++){
			mutado = false;
			// se genera un numero aleatorio en [0 1)
			prob = ran.r.nextDouble();
			// muta con prob<prob_mut
			if (prob<prob_mut){
				//LLamamos a cada tipo de mutacion
				pob[i]=mutar(pob[i], ran, param);
				mutado = true;
			}
			if (mutado) pob[i].setAptitud(pob[i].evalua());
		}

		return pob;
	}
	
	public abstract Cromosoma mutar(Cromosoma individuo, MiRandom ran,  int param);
}
